Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C++ Hook na 4 klawisze


Rekomendowane odpowiedzi

Opublikowano

Witajcie potrzebuje pomocy dokładniej jak założyć hooka(nie w celu jakiś kloggerow itp) na 4 klawisze mianowicie:

*Up Arrow KeyARROW key

*Right Arrow Key

*Down Arrow Key

*Left Arrow Key

 

Dla wytłumaczenia potrzebuje tego do zrobienia funkcji Dash w bocie do Tibi(żeby nie było).

Opublikowano

Nie jestem pewien, nie wiem nic ani o 1 ani o 2 :D

Tzn no wiem ze hook to zczytywanie jakie klawisze zostaly nacisniete a o 2 to nie czytalem.

Weteran
Opublikowano

Hook podczepia się pod program i dzięki temu wczytują strumień danych z klawiatury.

Nie jest to łatwe, większość i tak korzysta bezmózgo z gotowców.( w sumie, sam nie wiem czy bym potrafił to napisać)

 

Tu masz alternatywę:

 

  if(GetAsyncKeyState(VK_LEFT) &1)
  {
	cout<<"lol";
}

Opublikowano

To jest to samo co IsPressed.

Dlaczego nie skorzystasz z autoitowe funkcji WinApi-SetWindowsHookEx, którą poleciłem Ci wcześniej?

Ta sygnatura jest pusta.

Opublikowano

No spoko nie pomyślałem żeby to łączyć.

Muszę coś includować czy tylko Windows.h do tego?

Dzięki.

 

Ps.Tego posta mojego up nie uważaj za wiazd czy coś , tak to poprostu brzmi.

Opublikowano

A jak daje sprawdzanie to co podales tylko tak :


Memory* memory; 
Adresy adr;
Memory* tempMemory = new Memory();
DWORD pID = tempMemory->getProcessIdByExeName("Tibia.exe");
HANDLE gameHandle = tempMemory->doOpenProcess(pID);
memory = new Memory(NULL, pID, gameHandle);
HWND hWnd = tempMemory->getWindow("TibiaClient", "Tibia");
  if(GetAsyncKeyState(0x26) &1)
{

PostMessage(hWnd, WM_KEYUP, 0x26, 0); 

}

 

I nie działa a się kompiluje bez błędów.

Opublikowano

Nie wiem czy dokładnie o to chodzi, ale jeśli chcesz sprawdzić czy klawisz jest wciśnięty to:

if ((GetAsyncKeyState(0x26) & 0x80000000)>0)

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

To zwraca True/Flase??

Bo jak podstawiam zamiast tamtego ifa u gory to nie dziala.

Tak chodzi mi o sprawdzenie czy zostal wcisniety jesli tak to naciska jeszcze raz tak szybko jak tylko sie da.

Weteran
Opublikowano

Nie wiem czy dokładnie o to chodzi, ale jeśli chcesz sprawdzić czy klawisz jest wciśnięty to:

if ((GetAsyncKeyState(0x26) & 0x80000000)>0)

Dafuq?

 

 

Jeżeli chcesz sprawdzić jedynie w danym procesie.

To podczepiasz się pod program, robisz mu oddzielny wątek i używasz funkcji IsKeyDown(), to wszystko.

Np. możesz sobie zrobić dll`ke. Jest masa kursów na google jak to zrobić.

Opublikowano

Nie ogarniam jak to zrobic... Czemu nie można wyżej opisaną funkcja a raczej czemu nie działa:


Memory* memory; 
Adresy adr;
Memory* tempMemory = new Memory();
DWORD pID = tempMemory->getProcessIdByExeName("Tibia.exe");
HANDLE gameHandle = tempMemory->doOpenProcess(pID);
memory = new Memory(NULL, pID, gameHandle);
HWND hWnd = tempMemory->getWindow("TibiaClient", "Tibia");
  if(GetAsyncKeyState(0x26) &1)
{

PostMessage(hWnd, WM_KEYUP, 0x26, 0); 

}


Opublikowano

Żeby sprawdzić czy klawisz jest naciśnięty w innej aplikacji, robisz to po prostu tak:

// jeśli okno używane to kalkulator
 if ( GetForegroundWindow() == FindWindow(NULL,TEXT("Kalkulator")) )
 {
  // jesli klawisz jest nacisniety
  if ( (GetAsyncKeyState(VK_LEFT) & 0x80000000) >0 )
  {
// pisze asdf
printf("asdf");
  }
 }

 

Użycie if ( (GetAsyncKeyState(VK_LEFT) & 0x80000000) >0 ) zamiast tego co podali wyżej niweluje krótką pauzę po wciśnięciu przycisku.

 

Potem żeby nacisnąć przycisk drugi raz musisz go opuścić, nacisnąć i opuścić.

Twoja stara robi catch the clowny w Game Makerze.

Weteran
Opublikowano

Nie ogarniam jak to zrobic... Czemu nie można wyżej opisaną funkcja a raczej czemu nie działa:


Memory* memory;
Adresy adr;
Memory* tempMemory = new Memory();
DWORD pID = tempMemory->getProcessIdByExeName("Tibia.exe");
HANDLE gameHandle = tempMemory->doOpenProcess(pID);
memory = new Memory(NULL, pID, gameHandle);
HWND hWnd = tempMemory->getWindow("TibiaClient", "Tibia");
  if(GetAsyncKeyState(0x26) &1)
{

PostMessage(hWnd, WM_KEYUP, 0x26, 0);

}


 

Chodzi ci o samą funkcję GetAsyncKeyState(0x26)?

Zgaduję, że nie jest umieszczona w pętli :]

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...